/*
 * @(#)Association.java
 * Date 2013-09-05
 * Version 1.0
 * Author Jim Horner
 * Copyright (c)2012
 */


package us.hornerscorners.lamppost.model.document;

import java.util.ArrayList;
import java.util.List;

import us.hornerscorners.lamppost.model.common.AbstractClassifiableModel;
import us.hornerscorners.lamppost.model.common.CodedElement;
import us.hornerscorners.lamppost.model.common.InstanceIdentifier;
import us.hornerscorners.lamppost.model.common.PersistableModelType;


/**
 * Class description
 *
 *
 * @version        v1.0, 2013-09-05
 * @author         Jim Horner
 */
public class Association extends AbstractClassifiableModel {

    /** Field description */
    private String associationType;

    /** Field description */
    private final List<Attribute> attributes;

    /** Field description */
    private CodedElement availabilityStatus;

    /** Field description */
    private CodedElement documentation;

    /** Field description */
    private boolean sourceByReference;

    /** Field description */
    private String sourceEntryURN;

    /** Field description */
    private PersistableModelType sourceModelType;

    /** Field description */
    private InstanceIdentifier sourceUniqueId;

    /** Field description */
    private boolean targetByReference;

    /** Field description */
    private String targetEntryURN;

    /** Field description */
    private PersistableModelType targetModelType;

    /** Field description */
    private InstanceIdentifier targetUniqueId;

    /**
     * Constructs ...
     *
     */
    public Association() {

        super();

        this.attributes = new ArrayList<>();
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public String getAssociationType() {
        return associationType;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public List<Attribute> getAttributes() {
        return attributes;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public CodedElement getAvailabilityStatus() {
        return availabilityStatus;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public CodedElement getDocumentation() {
        return documentation;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public String getSourceEntryURN() {
        return sourceEntryURN;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public PersistableModelType getSourceModelType() {
        return sourceModelType;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public InstanceIdentifier getSourceUniqueId() {
        return sourceUniqueId;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public String getTargetEntryURN() {
        return targetEntryURN;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public PersistableModelType getTargetModelType() {
        return targetModelType;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public InstanceIdentifier getTargetUniqueId() {
        return targetUniqueId;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public boolean isSourceByReference() {
        return sourceByReference;
    }

    /**
     * Method description
     *
     *
     * @return
     */
    public boolean isTargetByReference() {
        return targetByReference;
    }

    /**
     * Method description
     *
     *
     * @param associationType
     */
    public void setAssociationType(String associationType) {
        this.associationType = associationType;
    }

    /**
     * Method description
     *
     *
     * @param availabilityStatus
     */
    public void setAvailabilityStatus(CodedElement availabilityStatus) {
        this.availabilityStatus = availabilityStatus;
    }

    /**
     * Method description
     *
     *
     * @param documentation
     */
    public void setDocumentation(CodedElement documentation) {
        this.documentation = documentation;
    }

    /**
     * Method description
     *
     *
     * @param sourceByReference
     */
    public void setSourceByReference(boolean sourceByReference) {
        this.sourceByReference = sourceByReference;
    }

    /**
     * Method description
     *
     *
     * @param sourceEntryURN
     */
    public void setSourceEntryURN(String sourceEntryURN) {
        this.sourceEntryURN = sourceEntryURN;
    }

    /**
     * Method description
     *
     *
     * @param sourceModelType
     */
    public void setSourceModelType(PersistableModelType sourceModelType) {
        this.sourceModelType = sourceModelType;
    }

    /**
     * Method description
     *
     *
     * @param sourceUniqueId
     */
    public void setSourceUniqueId(InstanceIdentifier sourceUniqueId) {
        this.sourceUniqueId = sourceUniqueId;
    }

    /**
     * Method description
     *
     *
     * @param targetByReference
     */
    public void setTargetByReference(boolean targetByReference) {
        this.targetByReference = targetByReference;
    }

    /**
     * Method description
     *
     *
     * @param targetEntryURN
     */
    public void setTargetEntryURN(String targetEntryURN) {
        this.targetEntryURN = targetEntryURN;
    }

    /**
     * Method description
     *
     *
     * @param targetModelType
     */
    public void setTargetModelType(PersistableModelType targetModelType) {
        this.targetModelType = targetModelType;
    }

    /**
     * Method description
     *
     *
     * @param targetUniqueId
     */
    public void setTargetUniqueId(InstanceIdentifier targetUniqueId) {
        this.targetUniqueId = targetUniqueId;
    }
}
